//
//  BannerView.m
//  02-团购基本实现
//
//  Created by apple on 15/11/10.
//  Copyright © 2015年 itcast. All rights reserved.
//

#import "BannerView.h"

#define kScrollViewSize (_scrollView.frame.size)

#define kImageCount 5

@interface BannerView()<UIScrollViewDelegate>

@property (nonatomic, weak) UIScrollView *scrollView;

@property (nonatomic, weak) UIPageControl *pageControl;

@property (nonatomic, strong) NSTimer *timer;

@end

@implementation BannerView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // 初始化
        
        [self setupScrollView];
        
        [self setupPageControll];
        
        // 创建计时器
        [self initImageTimer];
    }
    return self;
}


#pragma mark -
#pragma mark -  创建计时器
- (void)initImageTimer {
    /**
     scheduled 计划，安排
     interval : 间隔
     target :  一般指控制器
     selector: 方法
     userInfo : 用户自定义的参数
     repeats: 重复
     
     每隔1秒钟 调用 控制器的  didClickButton： 方法， 传递的参数为nil
     
     一旦创建就会立即生效
     
     在使用timer的时候， 如果调用了 invalidate方法， 那么这个计时器就不会再次生效
     重新创建新的timer
     */
    _timer = [NSTimer scheduledTimerWithTimeInterval:2
                                              target:self
                                            selector:@selector(didClickButton:)
                                            userInfo:nil
                                             repeats:YES];
       NSRunLoop *mainLoop = [NSRunLoop mainRunLoop];
    [mainLoop addTimer:_timer forMode:NSRunLoopCommonModes];
    
}

/**
 在开始拖拽的时候， 把计时器停止
 invalidate 无效的意思
 */
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    // 让计时器无效
    [_timer invalidate];
}

/**
 当停止拖拽的时候， 让计时器开始工作
 手指离开scrollView的时候
 */
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    [_timer fire];
    
    [self initImageTimer];
}



#pragma mark -
#pragma mark -  重写imageArray的set方法
- (void)setImageArray:(NSArray *)imageArray {
    _imageArray = imageArray;
    
    // 取出bannerView的size
    CGSize bannerViewSize = self.bounds.size;
    
    NSInteger count = imageArray.count;
    
    // 1. 给scrollView设置image
    for (int i = 0; i < count; i++) {
        // 取出图片名称
        NSString *imageName = imageArray[i];
        
        // 给scrllView添加imageView
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * bannerViewSize.width, 0, bannerViewSize.width, bannerViewSize.height)];
        
        // 给imageview设置图片
        imageView.image = [UIImage imageNamed:imageName];
        
        NSLog(@"%@, %@", imageView , [UIImage imageNamed:imageName]);
        
        // 添加imageView到 scrollView
        [_scrollView addSubview:imageView];
    }
    
    // 2. 设置scrollView的contentSize
    _scrollView.contentSize = CGSizeMake(count * bannerViewSize.width, 0);
    
    // 3. 设置pageControl
    _pageControl.numberOfPages = count;
    
 
}


#pragma mark -
#pragma mark -  设置scrollView
- (void)setupScrollView {
    // 对scrollView进行初始化
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
    
    self.scrollView = scrollView;
    
    // 设置属性
    scrollView.pagingEnabled = YES;
    
    // 初始化的时候， 设置代理
    scrollView.delegate = self;
    
    // 隐藏滚动条
    scrollView.showsHorizontalScrollIndicator = NO;
  
    // 添加到bannerView上
    [self addSubview:scrollView];
    
}

#pragma mark -
#pragma mark - 设置pageControll
- (void)setupPageControll {
    // 取出bannerView的size
    CGSize bannerViewSize = self.bounds.size;
    
    // 实例化一个pageControll
    UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, bannerViewSize.width/2, 20)];
    
    self.pageControl = pageControl;
    
    // 设置 pagecontrol 的中心点
    pageControl.center = CGPointMake(bannerViewSize.width/2, bannerViewSize.height * 0.9);
    
    // 设置属性
    pageControl.currentPageIndicatorTintColor = [UIColor redColor];
    pageControl.pageIndicatorTintColor = [UIColor grayColor];
    
    // 当前页码
    pageControl.currentPage = 0;
    
    [self addSubview:pageControl];
}

#pragma mark -
#pragma mark -  当scrollView停止减速的时候调用
// Decelerating 减速
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    // currentPage = scrollView.contentOffset.x / kScrollViewSize.width
    
    _pageControl.currentPage = scrollView.contentOffset.x / kScrollViewSize.width;
}

- (void)didClickButton:(id)sender {
    /**
     1. 取出scrollView的contentOffset
     2. 取出 pagecontroll 的 currentPage
     3. 进行修改
     4. 赋值回去
     */
    // 1. 取出 contentOffset
    CGPoint offset = _scrollView.contentOffset;
    
    // 2. currentPage
    NSInteger currentPage = _pageControl.currentPage;
    
    // 3. 进行修改
    
    if (currentPage == 4) {
        // 到了最后一张, 再次点击的时候， 到第一张图片的位置
        // currentPage 修改为0
        currentPage = 0;
        
        // 修改 scrollView的contentOffset
        offset = CGPointZero;
        
    } else {
        
        currentPage += 1;
        
        offset.x += kScrollViewSize.width;
    }
    
    // 4. 赋值回去
    _pageControl.currentPage = currentPage;
    [_scrollView setContentOffset:offset animated:YES];
    
}


@end
